<?php
	// Tác Giả: Đặng Tuấn Anh
	// Đề sử dụng bộ thư viện này bạn cần phải có JQuery-UI
	// Cài đặt JQuery-UI
	// Bước 1. Tải Jquery bản mới nhất
	// Bước 2. Tải JQuery-UI bản mới nhất tùy theme
	// Bước 3. Đối với controller sử dụng layout tương ứng, vd: dashboard.xml, thì thực hiện addJs và addCss tương ứng với các file: jquery/jquery.js, jquery/jquery-ui.js, jquery-ui.css và tải ảnh tương ứng vào thư mục: media/jquery/ui/
	// Sử dụng phương thức Fx_Tab_Set để tùy biến Tab
	// Lưu ý trong trường hợp cần sử dụng thì mới khai báo trong file xml, khi dùng ở controller ta có thể lấy về page cần hiển thị, sau đó thêm file js hay css bằng việc thực thi phương thức addCss, addJs trên mã nguồn PHP (không phải trong file xml)
	// Lưu ý để lưu lại trạng thái của tab cần có thư viện jquery.cookie.js
	
	class Fx_Tab_Set extends Fx_Tab_Item {
		
		// Id của Tab		
		protected $_id    = 'fxTabSet';
		// Classname của Tab
		protected $_class = 'tabs';
		// Các tab con
		protected $_items = array();
		
		function __construct($id = '') {
			parent::__construct($id);
		}
		
		// Thêm mới một tab, tab này phải là lớp dẫn xuất hoặc thuộc lớp Fx_Block
		public function addTab(Fx_Tab_Item $item) {
			if ($item->getId()) {
				$this->_items[$item->getId()] = $item;
				return $this;
			}
			return false;
		}

		// Xóa 1 tab con, thường hàm này không quan trọng, vì chỉ khi biết được chúng ta cần add tab nào thì mới add, không cần remove.
		public function removeTab($id) {
			if (isset($this->_items[$id])) {
				unset($this->_items[$id]);
				return $this;
			}	
			return false;
		}
		
		// Hàm Nạp Đè của lớp Fx_Block, hỗ trợ render lại việc hiển thị tab, khi kế thừa từ lớp này, ta có thể nạp đè thêm một hàm, đó là __init() để có thể addTab ngay từ lúc khởi tạo. Hàm toHtml() sẽ sử dụng getOutputHtml() để xuất ra định dạng tab.
		// Hàm quan trọng có nhiệm vụ render tab form
		// ** Important Method **
		
		public function getOutputHtml() {
			$output = "\n<div id=\"$this->_id\" class=\"$this->_class block clear\">\n";
			$output	.= "<ul>\n";
			$tab   = "";
			foreach ($this->_items as $_id => $_item) {
				if (method_exists($_item, 'isUsingAjax')) {
					if (!$_item->isUsingAjax()) {
						$output	.= "<li><a href=\"#tab-$_id\">$_id</a></li>\n";
					} else {
						$output	.= "<li><a href=\"".$_item->getUrl()."\">$_id</a></li>\n";				
					}
				} else {
					$output	.= "<li><a href=\"#tab-$_id\">$_id</a></li>\n";
				}
				$tab    .= "<div id=\"tab-$_id\">\n" . $_item->setVisible(true)->getOutputHtml()."\n</div>\n";
			}
			$output .= "</ul>\n" . $tab . "</div>\n";
			$output .= "<script language=\"javascript\">\n";
			$output .= "jQuery(document).ready(function(){\n";
			$output .= "jQuery(\"#$this->_id\").tabs()"; 
			$output .=".find(\".ui-tabs-nav\").sortable({axis:\"x\"});\n";
			$output .= "jQuery(\"#$this->_id\").resizable({ghost:true, animate:true});\n";
			$output .= "});\n";
			$output .= "</script>\n";
			
			return $output;
		}
		
		// Nếu kế thừa lớp này, nên nạp đè hàm __init để khởi tạo tab items.
		protected function __init() {
			$this->setId($this->_id);
			parent::__init();
			return $this;	
		}
	}
?>